package models;
import java.io.*;
import java.util.*;
public class Warehouse {
private static Warehouse instance;
private BufferedReader br = null;
private BufferedWriter bw = null;
private TreeSet<ProductStock> productStocks = new TreeSet<ProductStock>(new MyComparator());
private Warehouse() {
pullProductStockFromFile();
}
public static Warehouse getInstance() {
if (instance == null) {
instance = new Warehouse();
}
return instance;
}
public void increaseDecreaseStock(ProductStock productStock) {
ProductStock toBeUpdated = new ProductStock(new Product("", 0), 0);
for(ProductStock ps: productStocks){
if(ps.getProduct().getName().equals(productStock.getProduct().getName())){
toBeUpdated = ps;
}
}
productStocks.remove(toBeUpdated);
productStocks.add(productStock);
pushProductStockToFile();
}
public void addProduct(ProductStock productStock) {
productStocks.add(productStock);
pushProductStockToFile();
}
public void deleteProduct(ProductStock productStock) {
productStocks.remove(productStock);
pushProductStockToFile();
}
public TreeSet<ProductStock> filter(String filter) {
TreeSet<ProductStock> filtered = new TreeSet<ProductStock>(new MyComparator());
for(ProductStock ps: productStocks){
if(ps.getProduct().getName().matches(".*(" + filter + ").*")){
filtered.add(ps);
}
}
return filtered;
}
public TreeSet<ProductStock> getProductStock() {
return productStocks;
}
public void setProductStock(TreeSet<ProductStock> productStock) {
this.productStocks = productStock;
}
public void pushProductStockToFile() {
try {
BufferedWriter bw = new BufferedWriter(
new FileWriter("D:\\UT\\2nd year\\PT\\Lab\\HW2\\OrderManagement\\src\\models\\Stock"));
for (ProductStock p : productStocks) {
bw.write(p.getProduct().getName() + " " + p.getProduct().getPrice() + " " + p.getStock());
bw.newLine();
}
bw.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("error" + e.getMessage());
}
}
public void pullProductStockFromFile() {
double price;
String name;
int stock;
try {
br = new BufferedReader(
new FileReader("D:\\UT\\2nd year\\PT\\Lab\\HW2\\OrderManagement\\src\\models\\Stock"));
String line;
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, " ");
if (st.hasMoreTokens()) {
name = st.nextToken();
price = Double.parseDouble(st.nextToken());
stock = Integer.parseInt(st.nextToken());
productStocks.add(new ProductStock(new Product(name, price), stock));
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public class MyComparator implements Comparator<ProductStock> {
@Override
public int compare(ProductStock p1, ProductStock p2) {
return p1.getProduct().getName().compareTo(p2.getProduct().getName());
}
}
}